﻿using System;
using System.Collections.Generic;
using System.Web.UI;
using SisEagle.IView.Controle;
using SisEagle.View.Web.Base;
using SisEagle.Common.Code;
using System.Data;
using SisEagleVO;

namespace SisEagle.View.Web.Controle
{
    public partial class ControleVenda : Base.WebPageBase, IControleVendaView
    {
        int count = 0;
        #region Singleton
        private SisEagleBO.ControleVendasBO _ControleVendasBusiness;
        private SisEagleBO.ControleVendasBO ControleVendasBusiness
        {
            get
            {
                if (_ControleVendasBusiness == null)
                    _ControleVendasBusiness = new SisEagleBO.ControleVendasBO();

                return _ControleVendasBusiness;
            }
        }

        #endregion

        #region Page-Load/OnInit

        protected override void OnInit(EventArgs e)
        {
            base.OnInit(e);
            PaginaAtual = "~/Controle/ControleVenda.aspx";
            PaginaLista = "~/Controle/ControleVendas.aspx";
            Inicialize();
        }

        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {

                // Verifica se esta editando um registro
                if (Request.ExisteId())
                {
                    if (!Request.GetIdToInt().Equals(0))
                    {
                        DataSet VendasData = ControleVendasBusiness.FindBy_CodVenda(Request.GetIdToInt());
                        var VendasEntity = VendasData.Tables["ControleVendas"];

                        // Quando a entidade não for encontrada retorna a mensagem de registro não encontrado
                        if (VendasEntity == null)
                        {
                            return;
                        }
                        Acao = ActionData.Update;

                        SetView(VendasEntity);

                    }
                }
                // Criando um novo registro
                else
                {
                    //Novo(this, EventArgs.Empty);
                    NovosDados();

                }
            }
        }

        private void Inicialize()
        {
            UcbotoesCadastro.BotaoSalvar.Click += (BotaoSalvar_Click);
            UcbotoesCadastro.BotaoNovo.Click += (BotaoNovo_Click);
            UcbotoesCadastro.BotaoExcluir.Click += (BotaoExcluir_Click);
            UcbotoesCadastro.BotaoSalvarFechar.Click += (BotaoSalvarFechar_Click);
            UcbotoesCadastro.BotaoExcluir.Click += (BotaoExcluir_Click);
            UcbotoesCadastro.BotaoCancelar.Click += (s, ev) => Response.Redirect(PaginaLista,false);
        }
        #endregion

        #region Acoes Botoes

        private void BotaoNovo_Click(object sender, ImageClickEventArgs e)
        {
            RedirecionaSalvar = Redirecionamento.PaginaAtual;
            SalvarDados();
            NovosDados();
            limpartela();
        }


        private void BotaoSalvarFechar_Click(object sender, ImageClickEventArgs e)
        {
            RedirecionaSalvar = Redirecionamento.PaginaLista;
            SalvarDados();
            Response.Redirect(PaginaLista,false);
        }

        private void BotaoExcluir_Click(object sender, ImageClickEventArgs e)
        {

            if (count > 0)
                return;
            RedirecionaSalvar = Redirecionamento.PaginaLista;
            Acao = ActionData.Delete;
            SalvarDados();
            NovosDados();
            count++;
        }

        private void BotaoSalvar_Click(object sender, ImageClickEventArgs e)
        {
            RedirecionaSalvar = Redirecionamento.NaoRedirecionar;
            SalvarDados();
            NovosDados();
        }

        #endregion Acoes Botoes

        #region Binding

        public int CodVenda
        {
            get
            {
                if (string.IsNullOrEmpty(txtCodigo.Text) || !(UtilsNumber.IsNumber(txtCodigo.Text)))
                {
                    return 0;
                }
                else
                    return Convert.ToInt32(txtCodigo.Text);

            }
            set
            {
                txtCodigo.Text = value.ToString();
            }
        }

        public int CodProduto
        {
            get
            {
                if (string.IsNullOrEmpty(UcProdutos.ComboProdutos.SelectedValue) || !(UtilsNumber.IsNumber(UcProdutos.ComboProdutos.SelectedValue)))
                {
                    return 0;
                }
                else
                    return Convert.ToInt32(UcProdutos.ComboProdutos.SelectedValue);

            }
            set
            {

                UcProdutos.ComboProdutos.SelectedIndex = value;
            }
        }

        public int Quantidade
        {
            get
            {
                if (string.IsNullOrEmpty(txtQuantidadeVendida.Text) || !(UtilsNumber.IsNumber(txtQuantidadeVendida.Text)))
                {
                    return 0;
                }
                else
                    return Convert.ToInt32(txtQuantidadeVendida.Text);

            }
            set
            {
                txtQuantidadeVendida.Text = value.ToString();
            }
        }

        public decimal ValorUnitarioVenda
        {
            get
            {
                if (string.IsNullOrEmpty(txtValorUnitario.Text))
                {
                    return 0;
                }
                else
                    return Convert.ToDecimal(txtValorUnitario.Text);

            }
            set
            {
                txtValorUnitario.Text = value.ToString();
            }
        }

        public List<Mensagem> Mensagens
        {
            set
            {
                UcbotoesCadastro.AddMensagem(value);
                Redireciona(UcbotoesCadastro.HasError);
            }
        }

        private ActionData _Acao;
        [SaveInViewState]
        public ActionData Acao
        {
            get
            {

                return _Acao;

            }
            set
            {
                _Acao = value;
                UcbotoesCadastro.SetAcao(value);

            }
        }

        #endregion

        #region SetView - GetView - Novo

        private void SetView(DataTable ControleEstoqueEntity)
        {
            CodVenda = Convert.ToInt32(ControleEstoqueEntity.Rows[0]["CodVenda"]);
            CodProduto = Convert.ToInt32(ControleEstoqueEntity.Rows[0]["codProduto"]);
            Quantidade = Convert.ToInt32(ControleEstoqueEntity.Rows[0]["Quantidade"]);
            ValorUnitarioVenda = Convert.ToDecimal(ControleEstoqueEntity.Rows[0]["ValorUnitarioVenda"]);

        }

        private ControleVendasVO GetView()
        {
            return new ControleVendasVO
            {
                CodVenda = CodVenda,
                codProduto = CodProduto,
                Quantidade = Quantidade,
                ValorUnitarioVenda = ValorUnitarioVenda,

            };

        }

        private void NovosDados()
        {
            Acao = ActionData.New;
            

        }
        private void limpartela()
        {
            txtCodigo.Text = string.Empty;
            txtQuantidadeVendida.Text = string.Empty;
            txtValorUnitario.Text = string.Empty;
        }


        #endregion

        #region Crud
        private void SalvarDados()
        {
            int controlador = 0;
            //Instancia da entidade que sera Salva
            SisEagleVO.ControleVendasVO VendasEntity = new SisEagleVO.ControleVendasVO();


            //Busca os dados da view
            VendasEntity = GetView();


            switch (Acao)
            {

                case ActionData.New: ControleVendasBusiness.Insert(VendasEntity);
                    break;
                case ActionData.Update: ControleVendasBusiness.Update(VendasEntity);
                    break;
                case ActionData.Delete: ControleVendasBusiness.Delete(VendasEntity);
                    break;
                case ActionData.None:
                default:
                    break;
            }

            //MonstraMensagem(controlador, Acao);
        }
        #endregion
    }
}